/**
 * Esta función valida que el dato no sea nulo y que no este vacio.
 * Se utiliza para validar los campos marcados como obligatorios.
 */
function validaGenerico(obj){
    if(obj!=null){
        if(trim(obj.value).length == 0)
        {
            return false;
        }else{
            return true;
        }
    }else{
        return false;
    }
    
    return true;
}

/**
 *Función para validar el formato de la clave de un producto o de un movimiento
 *Recibe un objeto de control HTML y lo valida con la expresión regular
 **/
function validaClave(campoValidar, idMensaje){
    if(validaGenerico(campoValidar)){
        if(validarExpresion(trim(campoValidar.value), '^[a-z A-Z]{3}[0-9]{4}$')){
            idMensaje.innerHTML = '';
            return true;
        }else{
            campoValidar.focus();
            idMensaje.innerHTML = 'El campo no cumple con el formato requerido.';
            return false;
        }
    }else{
        campoValidar.value='';
        campoValidar.focus();
        idMensaje.innerHTML = 'El campo es obligatorio.';
        return false;
    }
}

/**
 *Función para validar el formato de un nombre de un producto
 *Recibe un objeto de control HTML y lo valida con la expresión regular
 **/
function validaCadena(numCaracteres, campoValidar, idMensaje, requerido){
    if(requerido){
        if(validaGenerico(campoValidar)){
            if(trim(campoValidar.value).length <= numCaracteres){
                if(validarExpresion(trim(campoValidar.value), '^[a-z A-Z 0-9]{1,35}$')){
                    idMensaje.innerHTML = '';
                    return true;
                }else{
                    campoValidar.focus();
                    idMensaje.innerHTML = 'El campo no cumple con el formato requerido.';
                    return false;
                }
            }else{
                campoValidar.focus();
                idMensaje.innerHTML = 'El campo excede el número de caracteres permitidos: ' + numCaracteres + 'Max.';
                return false;
            }
        }else{
            campoValidar.value='';
            campoValidar.focus();
            idMensaje.innerHTML = 'El campo es obligatorio.';
            return false;
        }
        return false;
    }else{
        idMensaje.innerHTML = '';
        return true;
    }
}

/**
 *Función para validar el formato de un tipo de un producto
 *Recibe un objeto de control HTML y lo valida con la expresión regular
 **/
function validaCaracter(numCaracteres, campoValidar, idMensaje, requerido){
    if(requerido){
        if(validaGenerico(campoValidar)){
            if(trim(campoValidar.value).length <= numCaracteres){
                if(validarExpresion(trim(campoValidar.value), '^(E|G|e|g){1}$')){
                    idMensaje.innerHTML = '';
                    return true;
                }else{
                    campoValidar.focus();
                    idMensaje.innerHTML = 'El campo no cumple con el formato requerido, E o G.';
                    return false;
                }
            }else{
                campoValidar.focus();
                idMensaje.innerHTML = 'El campo es obligatorio.';
                return false;
            }
        }else{
            campoValidar.value='';
            campoValidar.focus();
            idMensaje.innerHTML = 'El campo es obligatorio.';
            return false;
        }
        return false;
    }else{
        idMensaje.innerHTML = '';
        return true;
    }
}

/**
 *Función para validar el formato de fecha
 *Recibe un objeto de control HTML y lo valida con la expresión regular
 **/
function validaFecha(campoValidar, idMensaje, requerido){
    if(requerido){
        if(validaGenerico(campoValidar)){
            if(validarExpresion(trim(campoValidar.value), '^(0[1-9]|[12][0-9]|3[01])[-/](0[1-9]|1[012])[-/](19|20)\\d\\d$')){
                idMensaje.innerHTML = '';
                return true;
            }else{
                campoValidar.focus();
                idMensaje.innerHTML = 'El formato de fecha no es valido, ej. 31/12/2012';
                return false;
            }
        }else{
            campoValidar.focus();
            idMensaje.innerHTML = 'El campo es obligatorio.';
            return false;
        }
        return false;
    }else{
        idMensaje.innerHTML = '';
        return true;
    }
}
/**
 *Función para validar el formato del numero
 *Recibe un objeto de control HTML y lo valida con la expresión regular
 **/
function validaFlotante(campoValidar, idMensaje, requerido){
    if(requerido){
        if(validaGenerico(campoValidar)){
            if(validarExpresion(trim(campoValidar.value), '[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?')){
                return true;
            }else{
                campoValidar.focus();
                idMensaje.innerHTML = 'El campo no cumple con el formato requerido.';
                return false;
            }
        }else{
            campoValidar.focus();
            idMensaje.innerHTML = 'El campo es obligatorio.';
            return false;
        }
        return false;
    }else{
        idMensaje.innerHTML = '';
        return true;
    }
}

/**
 * Función para validar una expresion regular
 * Recibe como parámetro un control y una expresion
 */
function validarExpresion(obj, regExp)
{
    var re = new RegExp(regExp);
    if (obj.match(re)) {
        return true;
    } else {
        return false;
    }
}

/**
 * Función para limpiar una cadena de texto con espacios a los extremos.
 */
function trim(stringToTrim) {
    return stringToTrim.replace(/^\s+|\s+$/g,"");
}

/**
 * Función para limpiar una cadena de texto con espacios a la izquierda.
 */
function ltrim(stringToTrim) {
    return stringToTrim.replace(/^\s+/,"");
}

/**
 * Función para limpiar una cadena de texto con espacios a la derecha.
 */
function rtrim(stringToTrim) {
    return stringToTrim.replace(/\s+$/,"");
}